/**
 * 加法(处理小数运算精度问题)
 * 思路: 0.2 + 14.123 === (0.2*1000 + 14.123*1000) / 1000 === (200+14123) / Math.pow(10,3)
 * @param {String | Number} 加数，可传多个
 * @return {Number}
*/
function add(...args) {
  const numStrings = [...args].map(num => (num ?? '').toString())
  const precisions = numStrings.map(str => str.split('.')[1]?.length || 0)
  const ratio = Math.pow(10, Math.max(...precisions))
  const total = numStrings.reduce((total,item) => total + (Number(item) || 0) * ratio, 0)

  return total / ratio
}

// // 测试
// add(1.1, 2.1)
// // 3.2
// add(14.123, 0.1, 1.06)
// // 15.283
// const arr = [undefined, null, 12, '14.6300', 0.1]
// add(...arr)
// // 26.73
